#include "adc_hal.h"
#include "basic.h"
#include "hardware_config.h"

extern uint16_t adc_collect[5];
extern uint8_t  adc_cap_flag;
void adc_hal_init(void)
{
    ADC_InitTypeDef ADC_InitStructure;
    ADC_StructInit(&ADC_InitStructure);                       /*初始化结构体*/
    ADC_InitStructure.Align = ADC_LEFT_ALIGN;                 /* ADC数据输出左对齐*/
    ADC_InitStructure.Trigger_Mode = ADC_1SEG_TRG;            /* 设置ADC转换模式为1段式采样 */
    ADC_InitStructure.FirSeg_Ch = ADC_5_TIMES_SAMPLE;         /* 第一段共采样5个通道 */
    ADC_InitStructure.ThrSeg_Ch = 0;                          /* 第三段共采样0个通道 */
    ADC_InitStructure.FouSeg_Ch = 0;                          /* 第四段共采样0个通道 */
    ADC_InitStructure.Trigger_Cnt = 0;                        /* 单段触发模式下触发一次采样所需要的事件数:0~15 0表示需要一次触发，15表示需要16次*/
    ADC_InitStructure.IE = ADC_EOS0_IRQ_EN ; /* ADC第 0段采样结束中断使能 */
    ADC_Init(ADC0, &ADC_InitStructure);
    //ADC 第0个采样信号和第1个采样信号
    ADC0_CHN0 = ADC_CHANNEL_15 | (ADC_CHANNEL_16 << 8);
		//ADC 第2个采样信号和第3个采样信号
    ADC0_CHN1 = ADC_CHANNEL_10 | (ADC_CHANNEL_11 << 8);
		//ADC 第4个采样信号
    ADC0_CHN2 = ADC_CHANNEL_17 ;
    ADC0_IF = 0xff; //清除ADC中断标志位
     __disable_irq();
  	NVIC_EnableIRQ(ADC0_IRQn);      	/* 使能ADC0中断*/
	  NVIC_SetPriority(ADC0_IRQn, 2); 	/* ADC0中断优先级配置*/
    __enable_irq(); /* 开启中断 */


} 
/**
 * @brief adc 更新，需要在主循环中调用
 * 
 */
int adc_loop_update(void)
{
    ADC0_SWT = 0x5AA5; 
    return 0;
}
uint8_t adc_read_finish(void)
{
    return adc_cap_flag;
}
void adc_clear_finish(void)
{
   adc_cap_flag = 0;
}
uint16_t adc_hal_get_value(uint8_t num)
{
  return adc_collect[num];
}
uint16_t adc_get_iout(void)
{
	return adc_collect[1];
}
